Ir para conteúdo
Faça parte da equipe! (2024) ×

Sc2ALLin

Ruby Member
  • Total de Posts

    2.158
  • Registro em

  • Última visita

  • Dias Ganhos

    1
  • WCoins

    367

Tudo que Sc2ALLin postou

  1. Vai no useitem, é registra o ID do item é use a função DoTeleporte..
  2. //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; }
  3. //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 };
  4. Usava muito esse negocio aqui... super alto explicativo. [Hidden Content]
  5. //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; }
  6. //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.
  7. //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; }
  8. //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; } } } } }
  9. Esse não seria o SummonGuildWar? Porque esse codigo ai que postei não seria só para definir as guildas ganhadoras?
  10. //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; }
  11. 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...
  12. 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.
  13. Isso e o MobKilled do GuildQuestRaid(Quest do Cebolão) do Global. Para ser exato essa quest ai.
  14. @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...
  15. Para quem desconhece tal função, ela é responsavel por dropar um item aleatorio do player morto com CP -75...
  16. 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...
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.