Tipo de Conteúdo
Perfis
Fóruns
Atualizações
Quizzes
Store
Tudo que Sc2ALLin postou
-
Vai no useitem, é registra o ID do item é use a função DoTeleporte..
-
Tanto faz...
-
//0x40175D; int BASE_GetBonusAcPoint(STRUCT_MOB* mob, int CurrentFace) { int Point = 0; if (BASE_GetCheckFace(CurrentFace)) Point = 2 * mob->BaseScore.Level + 4; else Point = mob->BaseScore.Level + 4; mob->BaseScore.Ac = Point; return true; }
-
//0x401375 int BASE_GetHpMp(STRUCT_MOB* mob, int CurrentFace) { int MobClass = mob->Class; int MobFace = BASE_GetCheckFace(CurrentFace); if (MobClass < TRANSKNIGHT || MobClass > HUNTRESS) return false; int BaseHP = BaseSIDCHM[MobClass][4]; int CalcBaseHP = 2 * mob->BaseScore.Con - BaseSIDCHM[MobClass][3]; int IncHP = g_pIncrementHp[MobClass + MobFace] * mob->BaseScore.Level; mob->BaseScore.MaxHp = IncHP + CalcBaseHP + BaseHP; mob->CurrentScore.MaxHp = IncHP + CalcBaseHP + BaseHP; int BaseMP = BaseSIDCHM[MobClass][5]; int CalcBaseMP = 2 * mob->BaseScore.Int - BaseSIDCHM[MobClass][1]; int IncMP = g_pIncrementMp[MobClass + MobFace] * mob->BaseScore.Level; mob->BaseScore.MaxMp = IncMP + CalcBaseMP + BaseMP; mob->CurrentScore.MaxMp = IncMP + CalcBaseMP + BaseMP; return true; } int BaseSIDCHM[4][6] = {// F I D C HP MP {8, 4, 7, 6, 80, 45}, // Transknight {5, 8, 5, 5, 60, 65}, // Foema {6, 6, 9, 5, 70, 55}, // BeastMaster {8, 9, 13, 6, 75, 60} // Hunter }; int g_pIncrementHp[4] = { 3, 1, 1, 2 }; int g_pIncrementMp[4] = { 1, 3, 2, 1 };
-
Servidor existente porém as pessoas não conseguem conectar
Sc2ALLin respondeu ao pergunta de lukewanted em WYD - Dúvidas
talvez tenha que add a db e a tm no seu firewell -
Usava muito esse negocio aqui... super alto explicativo. [Hidden Content]
-
//0x4016EA; int CreateItem(int x, int y, STRUCT_ITEM* item, int Rotate, char Create, int Unknow) { if (item->sIndex <= 0 || item->sIndex >= MAX_ITEM) return false; GetEmptyItemGrid(&x, &y); if (pHeightGrid[y][x] <= -105 || pHeightGrid[y][x] >= 115) return false; if (pItemGrid[y][x]) return false; int EmptyItem = GetEmptyItem(); if (!EmptyItem) return false; pItem[EmptyItem].Mode = 1; pItem[EmptyItem].PosX = x; pItem[EmptyItem].PosY = y; memcpy(&pItem[EmptyItem].ITEM, item, sizeof(STRUCT_ITEM)); pItem[EmptyItem].Rotate = Rotate; pItem[EmptyItem].State = STATE_OPEN; pItem[EmptyItem].Delay = 0; pItem[EmptyItem].Decay = 0; pItem[EmptyItem].GridCharge = BASE_GetItemAbility(item, EF_GROUND); pItemGrid[y][x] = EmptyItem; pItem[EmptyItem].Height = pHeightGrid[y][x]; pItem[EmptyItem].Money = SecCounter; pItem[EmptyItem].Open = Unknow; MSG_CreateItem cItem; memset(&cItem, 0, sizeof(MSG_CreateItem)); cItem.Type = _MSG_CreateItem; cItem.Size = sizeof(MSG_CreateItem); cItem.ID = ESCENE_FIELD; cItem.ItemID = EmptyItem + 15000; memcpy(&cItem.Item, &pItem[EmptyItem].ITEM, sizeof(STRUCT_ITEM)); cItem.GridX = x; cItem.GridY = y; cItem.Rotate = Rotate; cItem.State = pItem[EmptyItem].State; cItem.Create = Create; cItem.Owner = Unknow; cItem.Height = pItem[EmptyItem].Height; if (x <= 16 || x >= 20 || y >= 29) GridMulticast(x, y, (MSG_STANDARD*)&cItem, 0); else GridMulticastRange(x, y, (MSG_STANDARD*)&cItem, 0); return EmptyItem; }
-
//0x0401401 int PutItem(int conn, STRUCT_ITEM* item) { if (conn <= 0 || conn >= MAX_USER) return false; if (pUser[conn].Mode != USER_PLAY) return false; int i = 0; for (i = 0; i < MAX_CARRY; ++i) { if (BASE_CanCarry(pMob[conn].MOB.Carry, i)) { if (!pMob[conn].MOB.Carry[i].sIndex) break; } } if (i < 0 || i >= MAX_CARRY) { SendClientMessage(conn, g_pMessageStringTable[_NN_You_Have_No_Space_To_Trade]); return false; } else { memcpy(&pMob[conn].MOB.Carry[i], item, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARRY, i, &pMob[conn].MOB.Carry[i]); if (BASE_NeedLog(&pMob[conn].MOB.Carry[i], 0)) { char Code[136]; BASE_GetItemCode(&pMob[conn].MOB.Carry[i], Code); snprintf(szLog, 128, "tra,_npc_ 0 %s x : %4d y :%4d", Code, pMob[conn].TargetX, pMob[conn].TargetY); Log(szLog, pUser[conn].AccountName, pUser[conn].IP); } return true; } return false; } //0x40115E int PutItemCarry(int conn, int ItemIndex, STRUCT_ITEM* Item) { if (conn >= MAX_USER || pUser[conn].Mode != USER_PLAY || !pUser[conn].cSock.Sock) return false; if (!ItemIndex && !Item) return false; STRUCT_ITEM NewItem; memset(&NewItem, 0, sizeof(STRUCT_ITEM)); NewItem.sIndex = ItemIndex; if (!ItemIndex) memcpy(&NewItem, Item, sizeof(STRUCT_ITEM)); int EmptySlot = 0; for (int i = 0; i < MAX_CARRY; ++i) { if (BASE_CanCarry(pMob[conn].MOB.Carry, i)) { if (!pMob[conn].MOB.Carry[i].sIndex) ++EmptySlot; } } if (EmptySlot) { for (int j = 0; j < MAX_CARRY; ++j) { if (BASE_CanCarry(pMob[conn].MOB.Carry, j) && !pMob[conn].MOB.Carry[j].sIndex) { memcpy(&pMob[conn].MOB.Carry[j], &NewItem, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARRY, j, &pMob[conn].MOB.Carry[j]); return true; } } } else { SendClientMessage(conn, g_pMessageStringTable[_NN_FUll_CARRY]); return false; } return false; } //0x40144C int PutItemCargo(int conn, int ItemIndex, STRUCT_ITEM* Item) { if (conn <= 0 || conn >= MAX_USER || pUser[conn].Mode != USER_PLAY || !pUser[conn].cSock.Sock) return false; STRUCT_ITEM CargoItem; memset(&CargoItem, 0, sizeof(STRUCT_ITEM)); if (Item) { memcpy(&CargoItem, Item, sizeof(STRUCT_ITEM)); } else if (ItemIndex) { CargoItem.sIndex = ItemIndex; } for (int i = 0; i < MAX_CARGO; ++i) { if (BASE_CanCargo(&CargoItem, pUser[conn].Cargo, i % 9, i / 9) == 1) { memcpy(&pUser[conn].Cargo[i], &CargoItem, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARGO, i, &CargoItem); snprintf(szLog, 128, "-CARGO %d %d %d %d %d %d %d", CargoItem.sIndex, CargoItem.stEffect[0].cEffect, CargoItem.stEffect[0].cValue, CargoItem.stEffect[1].cEffect, CargoItem.stEffect[1].cValue, CargoItem.stEffect[2].cEffect, CargoItem.stEffect[2].cValue); Log(szLog, pUser[conn].AccountName, pUser[conn].IP); if (pUser[conn].Mode >= USER_SELCHAR) SaveUser(conn, 0); return true; } } snprintf(szLog, 128, "-CARGO Fail %d %d %d %d %d %d %d", CargoItem.sIndex, CargoItem.stEffect[0].cEffect, CargoItem.stEffect[0].cValue, CargoItem.stEffect[1].cEffect, CargoItem.stEffect[1].cValue, CargoItem.stEffect[2].cEffect, CargoItem.stEffect[2].cValue); Log(szLog, pUser[conn].AccountName, pUser[conn].IP); return false; } Codigo atualizado.
-
Descompilação MSG_Quest "Dragão de Armia" TMSrv 7.56
Sc2ALLin postou um tópico no fórum em Descompilação
//Merchatn de registro do NPC é a 4. //Se você for adicionar no 7.56 é necessario adicionar esse pointeiro no ConstantPatch //É também adiocionar a struct para funciopnar tudo perfeitamente. g_pTreasure = reinterpret_cast<STRUCT_TREASURE(*)[8]>((STRUCT_TREASURE*)0x74F8198); struct STRUCT_TREASURE { short Source; STRUCT_ITEM Target[5]; short Rate[5]; }; if (Merchant == 4) { //if (dword_BD6A4C)//Alguma coisa relacionado com missões // sub_401A4B(conn);//Como não sei bem oque é. Não irei descopilar. int TreasureMap = CombineTreasureMap(conn);//Depois descopilo isso... if (!TreasureMap) { for (int i = 0; i < MAX_CARRY; ++i) { int ItemEquip = pMob[conn].MOB.Carry[i].sIndex; if (ItemEquip > 0) { for (int j = 0; j < MAX_EQUIP; ++j) { int Treasure = g_pTreasure[j]->Source; if (Treasure > 0 && ItemEquip == Treasure) { snprintf(szLog, 128, "tra,_gold_ 0"); char Code[128]; BASE_GetItemCode(&pMob[conn].MOB.Carry[i], Code); strcat(szLog, Code); Log(szLog, pUser[conn].AccountName, pUser[conn].IP); memset(&pMob[conn].MOB.Carry[i], 0, sizeof(STRUCT_ITEM)); SendItem(conn, ITEM_PLACE_CARRY, i, &pMob[conn].MOB.Carry[i]); int rnd = rand() % 1000; STRUCT_ITEM Award; memset(&Award, 0, sizeof(STRUCT_ITEM)); if (rnd < g_pTreasure[j]->Rate[0]) memcpy(&Award, &g_pTreasure[i]->Target[0], sizeof(STRUCT_ITEM)); else if (rnd < g_pTreasure[j]->Rate[1]) memcpy(&Award, &g_pTreasure[j]->Target[1], sizeof(STRUCT_ITEM)); else if (rnd < g_pTreasure[j]->Rate[2]) memcpy(&Award, &g_pTreasure[j]->Target[2], sizeof(STRUCT_ITEM)); else if (rnd < g_pTreasure[j]->Rate[3]) memcpy(&Award, &g_pTreasure[j]->Target[3], sizeof(STRUCT_ITEM)); else if (rnd < g_pTreasure[j]->Rate[4]) memcpy(&Award, &g_pTreasure[j]->Target[4], sizeof(STRUCT_ITEM)); if (!Award.sIndex) { SendSay(Index, g_pMessageStringTable[_NN_Next_Chance]); return false; } snprintf(szLog, 128, "tra,%s 0", &pUser[conn].AccountName); BASE_GetItemCode(&Award, Code); strcat(szLog, Code); Log(szLog, "_gold_", pUser[conn].IP); PutItem(conn, &Award); SendSay(Index, g_pMessageStringTable[_NN_Congratulations]); return false; } } } } int Crystals[7]; memset(&Crystals, 0, sizeof(Crystals)); int NumCrystals = 0; for (int i = 0; i < MAX_CARRY; ++i) { int CrystalsID = pMob[conn].MOB.Carry[i].sIndex; if (CrystalsID >= 421 && CrystalsID <= 427) { Crystals[CrystalsID - 421] = 1; ++NumCrystals; } } if (Crystals[0] != 0 || Crystals[1] != 0 || Crystals[2] != 0 || Crystals[3] != 0 || Crystals[4] != 0 || Crystals[5] != 0 || Crystals[6] != 0) { if (pMob[conn].MOB.Equip[6].sIndex) { if (pMob[conn].MOB.Equip[6].sIndex < 3000 || pMob[conn].MOB.Equip[6].sIndex >= 3200) { int ItemTrans = BASE_GetItemAbility(&pMob[conn].MOB.Equip[6], EF_TRANS); if (ItemTrans == 1) { SendSay(Index, "#Unk8B2944"); return false; } else if (ItemTrans == 3) { SendSay(Index, "Item Celestial não pode ser utilizado."); return false; } else { SendEmotion(conn, 23, 0); STRUCT_ITEM* NewAdd = &pMob[conn].MOB.Equip[6]; STRUCT_ITEM OldAdd; memset(&OldAdd, 0, sizeof(STRUCT_ITEM)); memcpy(&OldAdd, NewAdd, sizeof(OldAdd)); NewAdd->stEffect[0].cEffect = 0; NewAdd->stEffect[0].cValue = 0; NewAdd->stEffect[1].cEffect = 0; NewAdd->stEffect[1].cValue = 0; NewAdd->stEffect[2].cEffect = 0; NewAdd->stEffect[2].cValue = 0; SetItemBonus(NewAdd, 25 * (NumCrystals / 10) + g_pItemList[pMob[conn].MOB.Equip[6].sIndex].nReqLvl, 1, 1104, 0); for (int i = 0; i < MAX_ITEM; ++i) { int CrystalsID = pMob[conn].MOB.Carry[i].sIndex; if (CrystalsID >= 421 && CrystalsID <= 427) { pMob[conn].MOB.Carry[i].sIndex = 0; memset(&pMob[conn].MOB.Carry[i], 0, sizeof(STRUCT_ITEM)); } } SendCarry(conn); pMob[conn].MOB.Quest |= 1; SendItem(conn, 0, 6, &pMob[conn].MOB.Equip[6]); snprintf(szLog, 128, g_pMessageStringTable[_SN_Now_I_Will_Enchant_Your], pMob[conn].MOB.MobName); SendSay(Index, szLog); SetAffect(conn, 44, 200, 200); SendScore(conn); snprintf(szLog, 128, "etc,crystal %d-%d OldAdd %d,%d,%d,%d,%d,%d NewAdd %d,%d,%d,%d,%d,%d", NewAdd->sIndex, NumCrystals, OldAdd.stEffect[0].cEffect, OldAdd.stEffect[0].cValue, OldAdd.stEffect[1].cEffect, OldAdd.stEffect[1].cValue, OldAdd.stEffect[2].cEffect, OldAdd.stEffect[2].cValue, NewAdd->stEffect[0].cEffect, NewAdd->stEffect[0].cValue, NewAdd->stEffect[1].cEffect, NewAdd->stEffect[1].cValue, NewAdd->stEffect[2].cEffect, NewAdd->stEffect[2].cValue); Log(szLog, pMob[conn].MOB.MobName, pUser[conn].IP); return false; } } else { SendSay(Index, g_pMessageStringTable[_NN_Only_Nomal_Weapons]); return false; } } else { SendSay(Index, g_pMessageStringTable[_NN_Equip_Weapon_To_Enchant]); return false; } } else { SendSay(Index, g_pMessageStringTable[_NN_Gather_7_Clistals]); return false; } } return false; } -
//0x401C2B void GuildWarSummon(int ChallangeGuild, int ChargeWarSpawnX, int ChargeWarSpawnY, int Num, int Zone) { int pos[2][150]; if (ChallangeGuild > 0) { memset(&pos, 0, sizeof(pos)); int count = 0; int GuildMandle = g_pGuild[ChallangeGuild >> 12][ChallangeGuild & 0xFFF].Mandle; int GuildZen = g_pGuild[ChallangeGuild >> 12][ChallangeGuild & 0xFFF].Citizen; for (int i = 0; i < MAX_USER; ++i) { if (pUser[i].Mode == USER_PLAY && pMob[i].Mode && pMob[i].MOB.Guild == ChallangeGuild && pMob[i].MOB.Clan == GuildMandle) { int Citizen = GetCitizen(i); if (Citizen) { if (Citizen == GuildZen && Zone >= 0 && Zone <= 3 && BASE_GetVillage(pMob[i].TargetX, pMob[i].TargetY) == Zone && (Zone != 2 || !pMob[i].Is2stClass())) { int Level = pMob[i].Is2stClass() == GOD2 ? pMob[i].MOB.CurrentScore.Level + 400 : pMob[i].MOB.CurrentScore.Level; int j = 0; for (j = count - 1; j >= 0 && pos[1][j] < Level; --j) { pos[0][j + 1] = pos[0][j]; pos[1][j + 1] = pos[1][j]; } pos[0][j + 1] = i; pos[1][j + 1] = Level; if (++count >= 150) break; } } } } for (int k = 0; k < Num && pos[0][k]; ++k) { int conn = pos[0][k]; if (pUser[conn].Mode == USER_PLAY && pMob[conn].Mode && pMob[conn].MOB.Guild == ChallangeGuild) { DoTeleport(conn, ChargeWarSpawnX, ChargeWarSpawnY, 0); if (k == 30) { ++ChargeWarSpawnX; ++ChargeWarSpawnY; } if (k == 45) { ChargeWarSpawnX -= 2; ChargeWarSpawnY -= 2; } } } } }
-
Esse não seria o SummonGuildWar? Porque esse codigo ai que postei não seria só para definir as guildas ganhadoras?
-
//TMSrv 7.56 0x401573 void DecideWinner() { for (WinnerIndex = 0; WinnerIndex < ValidGuild; ++WinnerIndex) { if (WinnerIndex != 4) { int ChargeSurvivor = 0; int ChallangeSurvivor = 0; char GuildChargeName[256]; char GuildChallangeName[256]; int ChargeGuild = g_pGuildZone[WinnerIndex].ChargeGuild; int ChallangeGuild = g_pGuildZone[WinnerIndex].ChallangeGuild; if (ChallangeGuild) { GetGuildName(ChargeGuild, GuildChargeName); GetGuildName(ChallangeGuild, GuildChallangeName); for (int i = g_pGuildZone[WinnerIndex].WarAreaY1; i <= g_pGuildZone[WinnerIndex].WarAreaY2; ++i) { for (int j = g_pGuildZone[WinnerIndex].WarAreaX1; j <= g_pGuildZone[WinnerIndex].WarAreaX2; ++j) { int MobGrid = pMobGrid[i][j]; if (MobGrid > 0 && MobGrid <= MAX_USER && pUser[MobGrid].Mode == USER_PLAY) { if (pMob[MobGrid].Mode) { if (pMob[MobGrid].MOB.CurrentScore.Hp > 0) { int MobGuild = pMob[MobGrid].MOB.Guild; int MobLevel = pMob[MobGrid].MOB.CurrentScore.Level; if (MobGuild) { if ((MobGuild == ChargeGuild || MobGuild == ChallangeGuild) && pMob[MobGrid].MOB.BaseScore.Level < 1000) { if (pMob[MobGrid].Is2stClass() == GOD2) MobLevel += 400; snprintf(szLog, 128, "sys,guild war survive %s(%d-%d)", pMob[MobGrid].MOB.MobName, MobGuild, MobLevel); Log(szLog, "-system", 0); if (MobGuild == ChargeGuild) { ChargeSurvivor += MobLevel; } else if (MobGuild == ChallangeGuild) { ChallangeSurvivor += MobLevel; } else { Log("err,more than 3 guild, at same guild zone", "-system", 0); } } } } } } } } if (ChargeSurvivor >= ChallangeSurvivor) { snprintf(szLog, 128, g_pMessageStringTable[_SSNN_GuildWarResult], GuildChallangeName, GuildChargeName, ChallangeSurvivor, ChargeSurvivor); SendGuildNotice(ChargeGuild, szLog); SendGuildNotice(ChallangeGuild, szLog); g_pGuildZone[WinnerIndex].ChargeCount++; snprintf(szLog, 128, "sys,guild war type1 : %d", g_pGuildZone[WinnerIndex].ChargeClan); Log(szLog, "-system", 0); } else { snprintf(szLog, 128, g_pMessageStringTable[_SSNN_GuildWarResult], GuildChargeName, GuildChallangeName, ChargeSurvivor, ChallangeSurvivor); SendGuildNotice(ChargeGuild, szLog); SendGuildNotice(ChallangeGuild, szLog); int v16 = 0; for (int k = 0; k < MAX_SERVER; ++k) { if (ServerIndex != k) { for (int l = 0; l < MAX_GUILDZONE; ++l) { if (ChallangeGuild == ChargedGuildList[k][l]) { v16 = 1; break; } } } } if (v16 == 1) { GuildWinner[WinnerIndex] = ChallangeGuild; GuildTax[WinnerIndex] = TownTax[WinnerIndex]; GuildWinner[WinnerIndex] = TownTax[WinnerIndex]; TownTax[WinnerIndex] = 0; g_pGuildZone[WinnerIndex].ChargeGuild = 0; } else { g_pGuildZone[WinnerIndex].ChargeGuild = ChallangeGuild; snprintf(szLog, 128, "sys,Owner Guild : %d ", g_pGuildZone[WinnerIndex].ChargeGuild); Log(szLog, "-system", 0); } g_pGuildZone[WinnerIndex].ChargeCount = 0; if (ChargeGuild != ChallangeGuild) { SetGuildFame(ChallangeGuild, 50); SetGuildFame(ChargeGuild, -50); } snprintf(szLog, 128, "sys,guild war type2 : %d", g_pGuildZone[WinnerIndex].ChargeClan); Log(szLog, "-system", 0); } snprintf(szLog, 128, "sys,guild war %d result %d(%d) %d(%d) - %d(%d)", WinnerIndex, ChargeGuild, ChargeSurvivor, ChallangeGuild, ChallangeSurvivor, g_pGuildZone[WinnerIndex].ChargeCount + 1, g_pGuildZone[WinnerIndex].ChargeClan); Log(szLog, "-system", 0); g_pGuildZone[WinnerIndex].ChallangeGuild = 0; } else { g_pGuildZone[WinnerIndex].ChargeCount++; snprintf(szLog, 128, "sys,not Final da guerra entre guildas %d(%d)", g_pGuildZone[WinnerIndex].ChargeClan, WinnerIndex); Log(szLog, "-system", 0); } } } int v11 = 0; for (int m = 0; m < 4; ++m) { if (g_pGuildZone[m].ChargeGuild == ChargedGuildList[ServerIndex][m]) { v11 = 1; break; } } if (!v11) { for (int n = 0; n < 4; ++n) { if (g_pGuildZone[n].ChargeGuild) { snprintf(szLog, 128, "sys,Change Guild zone %d,%d -- %d, ", g_pGuildZone[4].ChargeGuild, g_pGuildZone[n].ChargeGuild, g_pGuildZone[n].ChargeClan); Log(szLog, "-system", 0); ChargedGuildList[ServerIndex][n] = g_pGuildZone[n].ChargeGuild; g_pGuildZone[4].ChargeGuild = g_pGuildZone[n].ChargeGuild; g_pGuildZone[4].ChargeClan = g_pGuildZone[n].ChargeClan; WriteGuild(); return; } } } WriteGuild(); return; }
- 3 respostas
-
- 21
-
Bom dia, gostaria de saber se tem como retirar a criação da pasta de log após a copilação do projeto no visual? Para ser mas especifico, está pasta aqui...
-
Posso está errado, mais acho que essa TMsrv é aquela que estava dentro do um projeto que o seitbnao tinha postado. O SupremeDestiny, acho que ainda está aqui na comunidade.
-
Descompilação ProcessGuildRaidEnd - TMSrv 7.57
Sc2ALLin respondeu ao tópico de gcr_fc em Descompilação
Isso e o MobKilled do GuildQuestRaid(Quest do Cebolão) do Global. Para ser exato essa quest ai. -
Descompilação ProcessGuildRaidEnd - TMSrv 7.57
Sc2ALLin respondeu ao tópico de gcr_fc em Descompilação
@Edit, tinha postado um comentario todo emocionado aqui... Bom, se precisa de ajuda para tal função. Pode me acionar. Até porque estou atrás dela faz um tempo... -
Para quem desconhece tal função, ela é responsavel por dropar um item aleatorio do player morto com CP -75...
-
Ai oh, conteúdo top. Para quem não está ligado, é a função do mortal core... Isso ai resolve o problema do mortal core no 7.56 também, Só hookar...
-
Eita, ai sim heim...